package main

import "fmt"

func main() {
	slice1 := [][]int{}
	slice2 := []int{9, 10}
	modify1(slice1, slice2)
	fmt.Println(slice1)
	fmt.Println(slice2)
	/*
		[]
		[1000 10]
	*/

	slice1, slice2 = modify2(slice1, slice2)
	fmt.Println(slice1)
	fmt.Println(slice2)
	/*
		[[1000 10 2 3 4]]
		[1000 10 2 3 4]
	*/
}

//modify1只能对于切片原始数值更改，无法添加
//因为切片作为参数，是传递的切片地址，所以更改元素会影响原始切片
//如果增加元素，会超过切片原有大小，添加的元素会另外分配空间存储，就不会影响原有切片的值
func modify1(slice1 [][]int, slice2 []int) {
	slice2[0] = 1000
	_ = append(slice2, 2, 3, 4)
	_ = append(slice1, append([]int{}, slice2...))
}

//如果想要在函数中添加元素，需要将修改的元素返回
func modify2(slice1 [][]int, slice2 []int) ([][]int, []int) {
	slice2 = append(slice2, 2, 3, 4)
	slice1 = append(slice1, append([]int{}, slice2...))
	return slice1, slice2
}
